// 数组扁平化、去重、排序
var arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
//1、扁平化：
// let flatArr = arr.flat(4); //flat扁平化4次
// console.log('flatArr', flatArr);
// //去重
// let uniqueArr = Array.from(new Set(flatArr));
// console.log('uniqueArr', uniqueArr);
// //排序
// let sortArr = uniqueArr.sort((a, b) => a - b);
// console.log('sortArr', sortArr);

//补充：
/*
ES10出现的Array.flat()  Array.flatMap()
Array的flat()实现方式
1、实现方式1：递归
*/
Array.prototype.flat2 = function() {
  let _arr = [];
  this.forEach((item, i) => {
    if (Array.isArray(item)) {
      _arr = _arr.concat(item.flat());
    } else {
      _arr.push(item);
    }
  });
  return _arr;
};

/*
实现方式2：
连接数组返回字符串用，进行分割，然后map映射将数组的string转化为number

*/
Array.prototype.flat3 = function() {
  return this.toString()
    .split(',')
    .map(item => +item);
};


// arr.flat().flat() === arr.flat(2)

/*
Array.flatMap()
let array = [1, 2, 3, 4, 5]
array.map(x => [x, x * 2])
//转换
[Array(2), Array(2), Array(2)]
0: (2)[1, 2]
1: (2)[2, 4]
2: (2)[3, 6]
3: (2)[4, 8]
4: (2)[5, 10]
//继续
array.flatMap(v => [v, v * 2]) == array.flat(1) //1维flatMap效率高一点
[1, 2, 2, 4, 3, 6, 4, 8, 5, 10]
*/
let array = [1, 2, 3, 4, 5];

flatMap_array = array.flatMap(v => [v, v * 2]);
let flat_array = array.map(x => [x, x * 2]);
flat_array = flat_array.flat(1);
//从上面看出1维flatMap效率会高一些
